From 1167a3e107cfc1e740352da5c0a63fa5a61de283 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Fri, 21 Oct 2005 10:46:30 +0100 Subject: [PATCH] Upgrade tree to 2.6.12.6. Signed-off-by: Keir Fraser --- .../{2.6.12.5.patch => 2.6.12.6.patch} | 150 ++++++++++++++++-- 1 file changed, 137 insertions(+), 13 deletions(-) rename patches/linux-2.6.12/{2.6.12.5.patch => 2.6.12.6.patch} (92%) diff --git a/patches/linux-2.6.12/2.6.12.5.patch b/patches/linux-2.6.12/2.6.12.6.patch similarity index 92% rename from patches/linux-2.6.12/2.6.12.5.patch rename to patches/linux-2.6.12/2.6.12.6.patch index 5e874eb7b5..f876d022c5 100644 --- a/patches/linux-2.6.12/2.6.12.5.patch +++ b/patches/linux-2.6.12/2.6.12.6.patch @@ -6,7 +6,7 @@ diff --git a/Makefile b/Makefile PATCHLEVEL = 6 SUBLEVEL = 12 -EXTRAVERSION = -+EXTRAVERSION = .5 ++EXTRAVERSION = .6 NAME=Woozy Numbat # *DOCUMENTATION* @@ -1092,6 +1092,61 @@ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c } EXPORT_SYMBOL_GPL(qla2x00_probe_one); +diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c +--- a/drivers/scsi/sg.c ++++ b/drivers/scsi/sg.c +@@ -2969,23 +2969,22 @@ static void * dev_seq_start(struct seq_f + { + struct sg_proc_deviter * it = kmalloc(sizeof(*it), GFP_KERNEL); + ++ s->private = it; + if (! it) + return NULL; ++ + if (NULL == sg_dev_arr) +- goto err1; ++ return NULL; + it->index = *pos; + it->max = sg_last_dev(); + if (it->index >= it->max) +- goto err1; ++ return NULL; + return it; +-err1: +- kfree(it); +- return NULL; + } + + static void * dev_seq_next(struct seq_file *s, void *v, loff_t *pos) + { +- struct sg_proc_deviter * it = (struct sg_proc_deviter *) v; ++ struct sg_proc_deviter * it = s->private; + + *pos = ++it->index; + return (it->index < it->max) ? it : NULL; +@@ -2993,7 +2992,9 @@ static void * dev_seq_next(struct seq_fi + + static void dev_seq_stop(struct seq_file *s, void *v) + { +- kfree (v); ++ struct sg_proc_deviter * it = s->private; ++ ++ kfree (it); + } + + static int sg_proc_open_dev(struct inode *inode, struct file *file) +diff --git a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c +--- a/drivers/usb/net/usbnet.c ++++ b/drivers/usb/net/usbnet.c +@@ -1922,7 +1922,7 @@ static int genelink_rx_fixup (struct usb + + // copy the packet data to the new skb + memcpy(skb_put(gl_skb, size), packet->packet_data, size); +- skb_return (dev, skb); ++ skb_return (dev, gl_skb); + } + + // advance to the next packet diff --git a/fs/bio.c b/fs/bio.c --- a/fs/bio.c +++ b/fs/bio.c @@ -1337,6 +1392,18 @@ diff --git a/kernel/module.c b/kernel/module.c if (!percpu) { err = -ENOMEM; goto free_mod; +diff --git a/kernel/signal.c b/kernel/signal.c +--- a/kernel/signal.c ++++ b/kernel/signal.c +@@ -686,7 +686,7 @@ static void handle_stop_signal(int sig, + { + struct task_struct *t; + +- if (p->flags & SIGNAL_GROUP_EXIT) ++ if (p->signal->flags & SIGNAL_GROUP_EXIT) + /* + * The process is in the middle of dying already. + */ diff --git a/lib/inflate.c b/lib/inflate.c --- a/lib/inflate.c +++ b/lib/inflate.c @@ -1377,18 +1444,6 @@ diff --git a/lib/inflate.c b/lib/inflate.c } DEBG1("3 "); z = 1 << j; /* table entries for j-bit table */ -diff --git a/lib/zlib_inflate/inftrees.c b/lib/zlib_inflate/inftrees.c ---- a/lib/zlib_inflate/inftrees.c -+++ b/lib/zlib_inflate/inftrees.c -@@ -141,7 +141,7 @@ static int huft_build( - { - *t = NULL; - *m = 0; -- return Z_OK; -+ return Z_DATA_ERROR; - } - - diff --git a/mm/memory.c b/mm/memory.c --- a/mm/memory.c +++ b/mm/memory.c @@ -1431,6 +1486,28 @@ diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c if ((vlandev->state & VLAN_LINK_STATE_MASK) != flgs) { vlandev->state = (vlandev->state &~ VLAN_LINK_STATE_MASK) | flgs; +diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c +--- a/net/ipv4/icmp.c ++++ b/net/ipv4/icmp.c +@@ -349,12 +349,12 @@ static void icmp_push_reply(struct icmp_ + { + struct sk_buff *skb; + +- ip_append_data(icmp_socket->sk, icmp_glue_bits, icmp_param, +- icmp_param->data_len+icmp_param->head_len, +- icmp_param->head_len, +- ipc, rt, MSG_DONTWAIT); +- +- if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) { ++ if (ip_append_data(icmp_socket->sk, icmp_glue_bits, icmp_param, ++ icmp_param->data_len+icmp_param->head_len, ++ icmp_param->head_len, ++ ipc, rt, MSG_DONTWAIT) < 0) ++ ip_flush_pending_frames(icmp_socket->sk); ++ else if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) { + struct icmphdr *icmph = skb->h.icmph; + unsigned int csum = 0; + struct sk_buff *skb1; diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -1451,6 +1528,19 @@ diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c if (hh) { int hh_alen; +diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c +--- a/net/ipv4/ip_sockglue.c ++++ b/net/ipv4/ip_sockglue.c +@@ -848,6 +848,9 @@ mc_msf_out: + + case IP_IPSEC_POLICY: + case IP_XFRM_POLICY: ++ err = -EPERM; ++ if (!capable(CAP_NET_ADMIN)) ++ break; + err = xfrm_user_policy(sk, optname, optval, optlen); + break; + diff --git a/net/ipv4/netfilter/ip_conntrack_core.c b/net/ipv4/netfilter/ip_conntrack_core.c --- a/net/ipv4/netfilter/ip_conntrack_core.c +++ b/net/ipv4/netfilter/ip_conntrack_core.c @@ -1507,6 +1597,40 @@ diff --git a/net/ipv4/netfilter/ip_nat_proto_udp.c b/net/ipv4/netfilter/ip_nat_p unsigned int range_size, min, i; if (maniptype == IP_NAT_MANIP_SRC) +diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c +--- a/net/ipv6/ip6_input.c ++++ b/net/ipv6/ip6_input.c +@@ -198,12 +198,13 @@ resubmit: + if (!raw_sk) { + if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { + IP6_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS); +- icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR, nhoff); ++ icmpv6_send(skb, ICMPV6_PARAMPROB, ++ ICMPV6_UNK_NEXTHDR, nhoff, ++ skb->dev); + } +- } else { ++ } else + IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS); +- kfree_skb(skb); +- } ++ kfree_skb(skb); + } + rcu_read_unlock(); + return 0; +diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c +--- a/net/ipv6/ipv6_sockglue.c ++++ b/net/ipv6/ipv6_sockglue.c +@@ -503,6 +503,9 @@ done: + break; + case IPV6_IPSEC_POLICY: + case IPV6_XFRM_POLICY: ++ retv = -EPERM; ++ if (!capable(CAP_NET_ADMIN)) ++ break; + retv = xfrm_user_policy(sk, optname, optval, optlen); + break; + diff --git a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c --- a/net/ipv6/netfilter/ip6_queue.c +++ b/net/ipv6/netfilter/ip6_queue.c -- 2.30.2